package main

import (
	"context"
	"fmt"
	v1 "k8s.io/api/apps/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes/scheme"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
)

func main() {
	// 获取config，从本机中获取kubeconfig的配置文件。
	config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeFile)
	if err != nil {
		panic(err)
	}

	config.GroupVersion = &v1.SchemeGroupVersion
	// 设置反序列化
	config.NegotiatedSerializer = scheme.Codecs
	// 指定ApiPath,即/apis/apps/v1/namespaces/{namespace}/deployments，参考https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26
	config.APIPath = "apis"

	// 根据配置文件，获取rest客户端
	client, err := rest.RESTClientFor(config)
	if err != nil {
		panic(err)
	}

	// 指定接收参数
	result := &v1.DeploymentList{}

	// 指定namespace
	namespace := "default"
	// 通过rest client获取deployments的信息
	err = client.Get().
		Namespace(namespace).                                                    // 指定namespace
		Resource("deployments").                                                 // 指定要获取的资源对象
		VersionedParams(&metav1.ListOptions{Limit: 100}, scheme.ParameterCodec). // 指定大小限制和序列化工具
		Do(context.TODO()).                                                      // 执行
		Into(result)                                                             // 将结果写入result
	if err != nil {
		panic(err)
	}

	for _, dp := range result.Items {
		fmt.Println(dp.Name)
	}
}
